home *** CD-ROM | disk | FTP | other *** search
- RSC2OBJ: (Keine externen Resourcefiles mehr)
- """"""""
-
- RSC2OBJ erzeugt ein DRI kompatibles Objektformat zum hinzulinken in ihr Programm.
- Aufruf: 'rsc2obj <rsc-file>.RSC <obj-file>.O LABEL -r
- <rsc-file>.RSC : Eigabefile (Resorcefile).
- <rsc-file>.O : Ausgabefile (Objektcode).
- LABEL : Der Name(Bezeichner) über den auf die Resource zu-
- gegriffen werden kann. Deklaration in C:
- extern RSHDR LABEL;
- (RSHDR ist in aes.h definiert).
- -r : [Optional] prüft nach Möglichkeit, ob die Quelldatei
- wirklich ein Resourcefile ist und reloziert die Baum-
- Adressen, die Zeiger auf die free_images, free_strings,
- tedinfo-Strukturen, ...
- Notwendig für die Verwendung der beliegenden Module.
-
-
- Library-Funktionen:
- """""""""""""""""""
-
- int rsrc_shdr ( RSHDR *rsheader );
- int rsrc_ghdr ( RSHDR **rsheader );
- int rsrc_sobject( RSHDR *rsc, int re_gtype, int re_gindex, void *gaddr );
- int rsrc_gobject( RSHDR *rsc, int re_gtype, int re_gindex, void **gaddr );
-
-
- rsrc_shdr (ReSoRCe_SetHeaDeR):
- ------------------------------
- Führt auf alle Objekte der Resource, die durch den ResourceHeader (rsheader)
- identifiziert wird, ein 'rsrc_obfix()' durch und trägt den Zeiger auf die
- Resource in das 'global'-Array ([5,6] = ap_ptree) ein. Somit liegt die selbe
- Situation vor, als wenn die Resource mittels 'rsrc_load()' geladen worden
- wäre. Zusätzlich wird in global[7,8] der Zeiger auf den ResourceHeader und
- in global[9] die Länge der Resource eingetragen.
-
- RSHDR *rsheader : Zeiger auf den ResourceHeader der eingebundenen
- Resource.
- <Rückgabewert> : 0 - im Fehlerfall
- 1 - OK
-
-
- rsrc_ghdr (ReSoRCe_GetHeaDeR):
- ------------------------------
- Ließt den ResouceHeader wieder aus dem 'global'-Array aus.
-
- RSHDR **rsheader : Adresse des Zeiger, in dem der Zeiger auf den
- ResourceHeader zurückgegeben werden soll.
- <Rückgabewert> : 0 - im Fehlerfall
- 1 - OK
-
-
- rsrc_sobj (ReSoRCe_SetOBJect):
- ------------------------------
- Diese Funktion ist vergleichbar mit der Funktion 'rsrc_saddr()', nur das sie
- auf Basis eines RSHDR arbeitet und die offiziell dokumentierten Werte setzt
- im Gegensatz zu der Orginalfunktion des Betriebssystems. Allerdings ist für
- die folgenden Typen das Resultat identisch (bei den anderen "Objekten"
- setzt die AES-Funktion mitunter äußerst merkwürdige Werte):
- 0 Objektbaum
- 15 ad_frstr
- 16 ad_frimg
-
- RSHDR *rsc : Zeiger auf den ResourceHeader der eingebundenen
- Resource.
- int re_gtype : Objekttyp der gesetzt werden soll (vgl. rsrc_saddr())
- int re_gindex : Index des Objektes
- void *gaddr : Wert der gesetzt werden soll.
- <Rückgabewert> : 0 - im Fehlerfall
- 1 - OK
-
-
- rsrc_gobj (ReSoRCe_GetOBJect):
- ------------------------------
- Diese Funktion ist das Gegenstück zu rsrc_sobj und entspricht im wesentlichen
- der Funktion rsrc_gaddr() des AES. Auch hier gilt das oben gesagte!
- Bei den folgenden Typen das Resultat identisch mit rsrc_gaddr (bei den
- anderen "Objekten" liefert die AES-Funktion mitunter äußerst merkwürdige
- Werte):
- 0 Objektbaum
- 15 ad_frstr
- 16 ad_frimg
-
- RSHDR *rsc : Zeiger auf den ResourceHeader der eingebundenen
- Resource.
- int re_gtype : Objekttyp der gelesen werden soll (vgl. rsrc_gaddr())
- int re_gindex : Index des Objektes
- void **gaddr : Ausgelesener Wert
- <Rückgabewert> : 0 - im Fehlerfall
- 1 - OK
-
-
-
- ===========================================================================
-
- Ein Stück C-Programm:
- ---------------------
-
- extern RSHDR GEM_VIEW;
- :
- :
- rsrc_shdr (&GEM_VIEW); /* Hier werden die rsrc_obfix() durchgeführt */
- if (_app) {
- rsrc_gaddr(R_TREE, GVIEWMNU, &menu);
- :
- :
- menu_bar(menu, 1);
- }
-
- ---------------------
- ODER
- ---------------------
-
- #define IMGICON 0 /* Formular/Dialog */
- extern RSHDR ICON_IMG;
- :
- :
- {
- OBJECT *object;
- int i;
- object = *((OBJECT**)(ICON_IMG.rsh_trindex + (long)&ICON_IMG));
- for (i = 0; i < ICON_IMG.rsh_nobs; i++)
- #if CONSTANT
- {
- /* Für die ICONS (alles) in Pixel umrechnen nach HIGH_RES! */
- object[i].ob_x = 8 * (object[i].ob_x & 0x00FF) + ((object[i].ob_x >> 8) & 0x00FF);
- object[i].ob_y = 16 * (object[i].ob_y & 0x00FF) + ((object[i].ob_y >> 8) & 0x00FF);
- object[i].ob_width = 8 * (object[i].ob_width & 0x00FF) + ((object[i].ob_width >> 8) & 0x00FF);
- object[i].ob_height = 16 * (object[i].ob_height & 0x00FF) + ((object[i].ob_height >> 8) & 0x00FF);
- }
- #else
- rsrc_obfix(object, i);
- #endif
- }
- rsrc_gobject(&ICON_IMG, R_TREE, IMGICON, (void**) &iconTree);
-
- ---------------------
- Also kein Problem, auch nicht bei mehreren Resourcefiles (s. GEMVIEW)
-
-
- Dieter